package com.sky.robot.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sky.robot.entity.SkyTable;
import com.sky.robot.entity.SkyTableData;
import com.sky.robot.mapper.SkyTableDataMapper;
import com.sky.robot.service.SkyTableDataService;
import com.sky.robot.utils.JSONUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class SkyTableDataServiceImpl extends ServiceImpl<SkyTableDataMapper, SkyTableData> implements SkyTableDataService {

    @Autowired
    private SkyTableDataMapper skyTableDataMapper;

    @Override
    @Transactional
    public IPage<SkyTableData> listPage(IPage page, Map<String, Object> map) {
        // 查询分页数据
        List<SkyTableData> list = skyTableDataMapper.listPage(page, map);
        // 查询一共多少行数据
        Map<String, Object> mPage = skyTableDataMapper.sum(map);
        page.setRecords(list);
        page.setTotal((long) mPage.get("total"));
        return page;
    }

    @Override
    @Transactional(readOnly = true)
    public Object get(Map<String, Object> params) {
        String id = (String) params.get("id");
        SkyTableData skyTableData = getById(id);
        if (skyTableData != null) {
            String json = JSONUtils.beanToJson(skyTableData);
            Map<String, Object> map = JSONUtils.jsonToMap(json);
            map.putAll(params);
            params = map;
        }
        return params;
    }


    @Override
    @Transactional
    public SkyTableData add(SkyTableData skyTableData) {
        save(skyTableData);
        return skyTableData;
    }

    @Override
    @Transactional
    public SkyTableData insertTemporaryData(SkyTableData skyTableData) {

        save(skyTableData);
        return skyTableData;
    }

    @Override
    @Transactional
    public SkyTableData edit(SkyTableData skyTableData) {
        updateById(skyTableData);
        return skyTableData;
    }

    @Override
    @Transactional
    public Object delete(String id) {
        removeById(id);
        return null;
    }

    @Override
    @Transactional
    public Object deleteBatch(String ids) {
        List<String> idList = new ArrayList<>();
        for (String id : ids.split(",")) {
            idList.add(id);
        }
        removeByIds(idList);
        return null;
    }

    /**
     * 通过表名从tableData中获取数据
     */
    @Override
    public Map<String, Object> getTemporaryData(String tableName) {
        Map<String, Object> resultMap = new HashMap<>();
        LambdaQueryWrapper<SkyTableData> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SkyTableData::getTableName, tableName);
        List<SkyTableData> skyTableData = skyTableDataMapper.selectList(queryWrapper);
        List<Map<String, Object>> listData = new ArrayList<>();
        List<String> columns = new ArrayList<>();
        for (SkyTableData skyTableDatum : skyTableData) {
            Map<String, Object> map = new HashMap<>();
            String mapColName = skyTableDatum.getMapColName();// 映射字段
            String colValue = skyTableDatum.getColValue(); // 映射字段值
            map.put(mapColName, colValue);
            listData.add(map);
            columns.add(mapColName);
        }
        resultMap.put("columns", columns);
        resultMap.put("dataSource", listData);
        return resultMap;
    }
}
